package com.lijiajia.cloud.authserver.security.oauth.token;

import cn.hutool.core.util.IdUtil;
import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken;
import org.springframework.security.oauth2.common.DefaultOAuth2RefreshToken;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.common.OAuth2RefreshToken;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.security.oauth2.provider.OAuth2Request;
import org.springframework.security.oauth2.provider.token.TokenEnhancer;

/**
 * 描述
 *
 * @author lijiajia
 * @since 2019-04-03
 */
public class CustomTokenEnhancer implements TokenEnhancer {
    @Override
    public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
        OAuth2Request oAuth2Request = authentication.getOAuth2Request();
        if (accessToken instanceof DefaultOAuth2AccessToken) {

            DefaultOAuth2AccessToken token = (DefaultOAuth2AccessToken) accessToken;

            token.setValue(generateToken(oAuth2Request));
            OAuth2RefreshToken refreshToken = token.getRefreshToken();
            if (refreshToken instanceof DefaultOAuth2RefreshToken) {
                token.setRefreshToken(new DefaultOAuth2RefreshToken(generateToken(oAuth2Request)));
            }
            return token;
        }
        return null;
    }

    private String generateToken(OAuth2Request request) {
        return request.getClientId() + "-" + IdUtil.fastSimpleUUID();
    }
}
